/*
 * jQuery Plug-In: Table fixed head
 * Copyright 2016 Michael Weber <me@michiweber.de>
 */

(function($){
    $.fn.tfh = function(){

        var method = (arguments.length === 2) ? arguments[0] : ((arguments.length === 1 && typeof arguments[0] === 'string' ? arguments[0] : undefined));
        var options = $.extend({
            trigger: 0,
            top: 0
        },(arguments.length === 2) ? arguments[1] : ((arguments.length === 1 && typeof arguments[0] === 'object' ? arguments[0] : {} )));

        this.width = function(){
            return this.find('thead').attr('data-tmp-width',parseInt(this.find('thead').css('width'))).find('*').each(function(){
                $(this).attr('data-tmp-width',parseInt($(this).css('width')));
            }).end().end();
        };

        this.fix = function(){
             return this.find('.table-fixed-head-thead').css({
                 'margin-top': -26 + 'px',
                 'height':26+'px',
                 'position': 'fixed',
                 'width':$(this).parent().width(),
                 'min-width':$(this).parent().width(),
                 'overflow':'hidden'
             }).find('th').css({
                'height':26+'px'
             }).end();
         };
        $(".scrollTb").scroll(function() {
            var xValue = $(this).scrollLeft();
            $(this).find(".table-fixed-head-thead tr").css({'position':'absolute','margin-left':-xValue+'px','width':xValue+$(this).width()+'px'});
        });


        this.clone = function(){
            return this.find('thead').clone(true).prependTo(this).addClass('table-fixed-head-thead').end().end().removeAttr('data-tmp-width').find('*').removeAttr('data-tmp-width').end().end();
        };

        this.build = function(){
            return this.tfh('width').tfh('clone').find('[data-tmp-width]').each(function(){
                $(this).css({
                    'width': $(this).data('tmp-width') + 'px',
                    'minWidth': $(this).data('tmp-width') + 'px',
                    'maxWidth': $(this).parent() + 'px'
                });
            }).removeAttr('data-tmp-width').end().tfh('fix', options);
        };

        this.kill = function(){
            this.find('.table-fixed-head-thead').remove();
        };

        this.show = function(){
            return this.addClass('fixed').find('thead').css('visibility','visible').not('.table-fixed-head-thead').css('visibility','hidden').end().end();
        };

        this.hide = function(){
            return this.removeClass('fixed').find('thead').css('visibility','hidden').not('.table-fixed-head-thead').css('visibility','visible').end().end();
        };

        if(method !== undefined){
            return this[method].call($(this));
        } else {
            var table = this.build.call($(this),options);


            table.tfh('hide');
            var resizeTimer;
            var tableScrollLeft = table.position().left;
        }
    };
    $(document).ready(function(){
        $('table.table-fixed-head').each(function(){
            $(this).tfh({
                trigger: ($(this).data('table-fixed-head-trigger') !== undefined ? $(this).data('table-fixed-head-trigger') : 0),
                top: ($(this).data('table-fixed-head-top') !== undefined ? $(this).data('table-fixed-head-top') : $(this).position().top)
            });
        });
    });
}(jQuery));
